<?php
App::uses('AppController', 'Controller');
App::uses('FileValidation', 'Lib');
App::uses('TexChange', 'Lib');
/**
 * Trabalhos Controller
 *
 * @property Trabalho $Trabalho
 */
class TrabalhosController extends AppController {

	var $components = array('FileHandler');
	
	public function beforeFilter(){
		parent::beforeFilter();
		$this->Auth->allow(array('anais'));
	}
	
	private function mostrar_nota($trabalhos){
		foreach($trabalhos as &$item){
			if($item['Avaliacao']['hora_pedido_reavaliacao'] == '0000-00-00 00:00:00'){
				$item['mostrar_nota'] = ($this->Datas->getDataDivulgacaoTrabalho() <= date('Y-m-d H:i:s'));
			}
			else{
				$item['mostrar_nota'] = ($this->Datas->getDataDivulgacaoReavaliado() <= date('Y-m-d H:i:s'));
			}
		}
		return $trabalhos;
	}
	
	private function mostrar_nota_unico($trabalho){
		if($trabalho['Avaliacao']['hora_pedido_reavaliacao'] == '0000-00-00 00:00:00'){
			$trabalho['mostrar_nota'] = ($this->Datas->getDataDivulgacaoTrabalho() <= date('Y-m-d H:i:s'));
		}
		else{
			$trabalho['mostrar_nota'] = ($this->Datas->getDataDivulgacaoReavaliado() <= date('Y-m-d H:i:s'));
		}
		return $trabalho;
	}
	
	public function index($id_categoria = null) {
		$this->Trabalho->recursive = 1;
		$this->set('categorias', $this->Trabalho->Categoria->find('list'));
		if($this->isUsuario()){
			$conditions = array('usuario_id'=>$this->usuarioSessao['Usuario']['id']);
			$this->recursive = 0;
			//$this->set('mostrar_nota', $this->mostrar_nota());
			$this->set('editar', ($this->Datas->getDataFimSubmissao() > date('Y-m-d H:i:s')));
			$this->set('trabalhos', $this->mostrar_nota($this->paginate($conditions)));
		}
		else if($this->isAdmin()){
			$this->set('id_categoria', $id_categoria);
			if(!is_null($id_categoria))
				$conditions = array('categoria_id'=>$id_categoria);
			else 
				$conditions = array();
			$this->set('trabalhos', $this->paginate($conditions));
			$this->set('editar', true);
			$this->render('index_admin');
		}
		else
			$this->redirect('/pages/blank');
	}
	
	public function aval($tipo = null, $id_categoria = null) {
		if($this->isAdmin()){
			$this->Trabalho->recursive = 1;
			$this->set('categorias', $this->Trabalho->Categoria->find('list'));
			if(!is_null($tipo)){
				$this->set('id_categoria', $id_categoria);
				$this->set('tipo', $tipo);
				if($tipo == 'aprovados')
					$conditions = array('OR'=>array(array('Avaliacao.nota'=>$id_categoria), array('Avaliacao.nota_reavaliacao'=>$id_categoria)));
				elseif($tipo == 'reprovados')
					$conditions = array('Trabalho.categoria_id'=>$id_categoria,
							'OR'=>array(
								array('Avaliacao.nota_reavaliacao'=>0),
								array('Avaliacao.nota'=>0, 'Avaliacao.nota_reavaliacao'=>null),
							)
					);
				elseif($tipo == 'nao-avaliados')
					$conditions = array('Trabalho.categoria_id'=>$id_categoria, 'OR'=>array(array('Avaliacao.nota'=>null, 'Avaliacao.nota_reavaliacao'=>null), array('Trabalho.revisor_id'=>null)));
				$this->set('trabalhos', $this->paginate($conditions));
				#$this->render('index_admin');
			}
		}
		else
			$this->redirect('/pages/blank');
	}
	
	public function pedidos_de_reavaliacao(){
		if($this->isAdmin()){
			$this->Trabalho->recursive = 1;
			$this->set('categorias', $this->Trabalho->Categoria->find('list'));
			$conditions = array('Avaliacao.pedido_reavaliacao !=' => null);
			$this->set('trabalhos', $this->mostrar_nota($this->paginate($conditions)));
			#$this->render('index_admin');
		}
		else
			$this->redirect('/pages/blank');
	}

	public function a_revisar(){
		//TODO revisar
		if($this->isRevisor()){
			$this->set('trabalhos', $this->Trabalho->listaDeTrabalhosParaRevisor($this->usuarioSessao['Usuario']['id']));
			$this->set('categorias', $this->Trabalho->Categoria->find('list'));
		}
		else
			$this->redirect('/pages/blank');
	}
	
	public function reavaliar($id = null){
		//TODO DONE implementar
		if($this->Datas->getDataReavaliacaoTrabalho() < date('Y-m-d H:i:s')){
			$this->Session->setFlash(__('O prazo para pedido de reavaliação terminou !'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/pages/blank');
		}
		if($this->Datas->getDataDivulgacaoTrabalho() > date('Y-m-d H:i:s')){
			$this->Session->setFlash(__('Acesso inválido'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect('/pages/blank');
		}
		$this->Trabalho->recursive = 0;
		$trabalho = $this->Trabalho->find('first', array('conditions' => array('Trabalho.' . $this->Trabalho->primaryKey => $id)));
		if($trabalho['Avaliacao']['hora_pedido_reavaliacao'] != '0000-00-00 00:00:00'){
			$this->Session->setFlash(__('Você já pediu reavaliação desse trabalho!'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/pages/blank');
		}
		if($trabalho['Avaliacao']['nota'] != 0){
			$this->Session->setFlash(__('Acesso inválido'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect('index');
		}
		if($this->isAdmin() || ($trabalho['Trabalho']['usuario_id'] == $this->usuarioSessao['Usuario']['id'])){
			if(!empty($this->request->data)){
				$this->request->data['Avaliacao']['hora_pedido_reavaliacao'] = date('Y-m-d H:i:s');
				$this->request->data['Avaliacao']['id'] = $trabalho['Avaliacao']['id'];
				if($this->Trabalho->Avaliacao->save($this->request->data)){
					$this->Session->setFlash(__('O trabalho será reavaliado'), 'flash/bootstrap', array('class'=>'alert alert-success'));
					$this->redirect('index');
				}
				else{
					$this->Session->setFlash(__('Pedido não pode ser enviado!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				}
			}
		}
	}
	
	public function dar_nota($id_trabalho = null){
		if($this->Datas->getDataFimSubmissao() >= date('Y-m-d H:i:s')){
			$this->Session->setFlash(__('O prazo de submissão ainda não terminou !'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/pages/blank');
		}
		$trabalho = $this->Trabalho->podeCorrigir($this->usuarioSessao['Usuario']['id'], $id_trabalho);
		if($this->isRevisor() && $trabalho){
			if(!empty($this->request->data)){
				$this->request->data['Avaliacao']['id'] = $trabalho['Avaliacao']['id'];
				$this->request->data['Avaliacao']['trabalho_id'] = $id_trabalho;
				$this->request->data['Avaliacao']['avaliado_em'] = date('Y-m-d H:i:s');
				if($this->request->data['Avaliacao']['nota'] == -1) $this->request->data['Avaliacao']['nota'] = null;
				if($this->Trabalho->Avaliacao->save($this->request->data)){
					$this->Session->setFlash(__('Nota enviada!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
					$this->redirect('/trabalhos/a_revisar');
				}
				else{
					$this->Session->setFlash(__('Nota não pôde ser enviada!'), 'flash/bootstrap', array('class'=>'alert alert-block'));
					$this->request->data = array_merge($trabalho, $this->request->data);
				}
			}else $this->request->data = $trabalho;
			$this->set('categorias', $this->Trabalho->Categoria->categoriasParaNota());
		}
		else {
			$this->notAuth();
		}
	}
	
	public function reavaliar_nota($id_trabalho = null){
		if($this->Datas->getDataReavaliacaoTrabalho() >= date('Y-m-d H:i:s')){
			$this->Session->setFlash(__('O prazo de submissão ainda não terminou !'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/pages/blank');
		}
		$trabalho = $this->Trabalho->podeCorrigir($this->usuarioSessao['Usuario']['id'], $id_trabalho);
		if($this->isRevisor() && $trabalho){
			if(!empty($this->request->data)){
				$this->request->data['Avaliacao']['id'] = $trabalho['Avaliacao']['id'];
				$this->request->data['Avaliacao']['trabalho_id'] = $id_trabalho;
				$this->request->data['Avaliacao']['reavaliado_em'] = date('Y-m-d H:i:s');
				$this->request->data['Avaliacao']['pedido_reavaliacao'] = $trabalho['Avaliacao']['pedido_reavaliacao'];
				if($this->request->data['Avaliacao']['nota_reavaliacao'] == -1) $this->request->data['Avaliacao']['nota_reavaliacao'] = null;
				if($this->Trabalho->Avaliacao->save($this->request->data)){
					$this->Session->setFlash(__('Nota enviada!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
					$this->redirect('/trabalhos/a_revisar');
				}
				else{
					$this->Session->setFlash(__('Nota não pôde ser enviada!'), 'flash/bootstrap', array('class'=>'alert alert-block'));
					$this->request->data = array_merge($trabalho, $this->request->data);
				}
			}else $this->request->data = $trabalho;
			$this->set('categorias', $this->Trabalho->Categoria->categoriasParaNota());
		}
		else {
			$this->notAuth();
		}
	}
	
	public function view($id = null) {
		if (!$this->Trabalho->exists($id)) {
			throw new NotFoundException(__('Trabalho Inválido'));
		}
		$options = array('conditions' => array('Trabalho.' . $this->Trabalho->primaryKey => $id));
		$trabalho = $this->Trabalho->find('first', $options);
		if($this->isAdmin()){
			$trabalho['mostrar_nota'] = true;
			$this->set('trabalho', $trabalho);
			$this->set('mostrar_nota', true);
		}
		else {
			$auth = $this->Auth->user();
			if(($trabalho['Trabalho']['usuario_id'] == $auth['Usuario']['id']) || ($trabalho['Trabalho']['revisor_id'] == $auth['Usuario']['id'])){
				$this->set('trabalho', $this->mostrar_nota_unico($trabalho));
				$this->set('editar', ($this->Datas->getDataFimSubmissao() > date('Y-m-d H:i:s')));
			}
			else {
				$this->notAuth();
			}
		}
		$this->set('categorias', $this->Trabalho->Categoria->find('list'));
	}

/**
 * add method
 *
 * @return void
 */
	// TODO Mudar pasta onde ficam os arquivos
	public function submeter() {
		if($this->Datas->getDataInicioSubmissao() > date('Y-m-d H:i:s') || $this->Datas->getDataFimSubmissao() < date('Y-m-d H:i:s')){
			$this->Session->setFlash(__('Fora do prazo de submissão de trabalhos'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/pages/blank');
		}
		if($this->isUsuario()){
			if ($this->request->is('post')) {
				$this->Trabalho->create();
				$this->request->data['Trabalho']['usuario_id'] = $this->usuarioSessao['Usuario']['id'];
				$this->request->data['Trabalho']['nome_original'] = $this->request->data['Trabalho']['trabalho']['name'];
				$pasta = $this->usuarioSessao['login'];
				$this->FileHandler->diretorio = DIRETORIO_TRABALHOS;
				$this->request->data['Trabalho']['caminho'] = $pasta.DS.time();
				$count = 0;
				foreach($this->request->data['Keywords'] as $item){
					if(!empty($item['keyword']))
						$count++;
				}
				if(!$this->FileHandler->validar($this->request->data['Trabalho']['trabalho'])){

				}
				else {
					if($this->FileHandler->armazenar($pasta, $this->request->data['Trabalho']['caminho'], $this->request->data['Trabalho']['trabalho']['tmp_name'])){
// 						pr($this->request->data);exit;
						$i = 0;
						foreach ($this->request->data['Keywords'] as $item){
							if(empty($item['keyword']))
								unset($this->request->data['Keywords'][$i]);
							$i++;
						}
						if ($count >= 3 && $this->Trabalho->saveAll($this->request->data)){
							$this->Session->setFlash(__('O trabalho foi enviado com sucesso'), 'flash/bootstrap', array('class'=>'alert alert-success'));
							$this->redirect('/pages/blank');
						} else {
							if($count < 3) $this->Session->setFlash(__('Você deve inserir 3 palavras-chave'), 'flash/bootstrap', array('class'=>'alert alert-error'));
							else 
								$this->Session->setFlash(__('O trabalho não foi enviado. Por favor tente novamente!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
							$this->FileHandler->apagarArquivo($this->request->data['Trabalho']['caminho']);
						}
					}
					else {
						$this->Session->setFlash(__('O trabalho não foi enviado. Por favor tente novamente!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
					}
				}
			}
			$usuarios = $this->Trabalho->Usuario->find('list');
			$revisors = $this->Trabalho->Revisor->find('list');
			$categorias_completa = $this->Trabalho->Categoria->find('all', array('order'=>'ordem ASC'));
			$categorias = $this->Trabalho->Categoria->find('list');
			$sessaos = $this->Trabalho->Sessao->find('list');
			$this->set(compact('usuarios', 'revisors', 'categorias', 'sessaos', 'categorias_completa'));
		}
		else {
			$this->Session->setFlash(__('Apenas usuarios comuns e revisores podem submeter trabalhos.'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/pages/blank');
		}
	}

	public function definir_revisores($id){
		//TODO marcar no select da view o atual e adicionar a opcao de apagar o revisor
		if($this->isAdmin()){
			if($this->request->is('post') || $this->request->is('put')){
				$revisor_id = $this->request->data['Trabalho']['revisores'];
				if($this->Trabalho->definirRevisor($id, $revisor_id)){
					$this->Session->setFlash(__('Revisor definido com sucesso!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
					$this->redirect(array('action' => 'view/'.$id));
				}
				else
					$this->Session->setFlash(__('Revisor não foi definido!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			}	
			$lista = $this->Trabalho->Usuario->listDeRevisores();
			$lista[0] = 'Apagar revisor';
			$this->set('revisores', $lista);
			$this->Trabalho->unbindModel(array('belongsTo'=>array('Usuario', 'Revisor', 'Sessao', 'Categoria')));
			$trabalho = $this->Trabalho->findById($id);
			$this->set('revisor_do_trabalho', $trabalho['Trabalho']['revisor_id']);
			$this->Trabalho->recursive = -1;
			$this->set('trabalho', $trabalho);
		}
		else {
			$this->notAuth();
		}
	}
	
	public function lista_de_trabalhos_para_revisor($revisor){
		if($this->isAdmin()){
			if(!empty($this->request->data)){
				foreach($this->request->data as $key=>$item){
					$key_exploded = explode('_', $key);
					if($key_exploded[1] == 'sem'){ // Vai adicionar trabalho para o revisor
						if($item){
							$this->Trabalho->definirRevisor($key_exploded[2], $revisor);
						}
					}
					elseif($key_exploded[1] == 'revisor'){ // Vai retirar trabalho do revisor
						if(!$item){
							$this->Trabalho->definirRevisor($key_exploded[2], null);
						}
					}
				}
			}
			$this->set('revisor', $this->Trabalho->Revisor->findById($revisor));
			$trabalhos_do_revisor = $this->Trabalho->find('all', array('conditions'=>array('revisor_id'=>$revisor)));
			$this->set('trabalhos_do_revisor', $trabalhos_do_revisor);
			$trabalhos_sem_revisor = $this->Trabalho->find('all', array('conditions'=>array('OR'=>array(array('revisor_id'=>NULL), array('revisor_id'=>0)))));
			$this->set('trabalhos_sem_revisor', $trabalhos_sem_revisor);
		}else{
			$this->notAuth();
		}
	}
	
	private function podeEditar($trabalho){ 
		// ADMIN SEMPRE PODE
		if($this->isAdmin())
			return true;
		// SE NAO ESTOU EDITANDO MEU PRÓPRIO TRABALHO, NAO POSSO EDITAR
		if($trabalho['Trabalho']['usuario_id'] != $this->usuarioSessao['Usuario']['id']){
			$this->Session->setFlash(__('Você não é dono desse trabalho!'),  'flash/bootstrap', array('class'=>'alert alert-block'));
			return false;
		}
		// SE MINHA NOTA É DIFERENTE DE 0, NÃO POSSO EDITAR
		if($trabalho['Avaliacao']['nota'] != 0)
			return false;
		// SE FUI REPROVADO, MAS JA PASSOU DO PERIODO DO PEDIDO DE REAVALIAÇÃO, NAO POSSO ALTERAR
		if($trabalho['Avaliacao']['nota'] == 0 && $this->Datas->getDataReavaliacaoTrabalho() < date('Y-m-d H:i:s')){
			$this->Session->setFlash(__('Período de Pedido de Avaliação terminou!'),  'flash/bootstrap', array('class'=>'alert alert-block'));
			return false;
		}
		return true;
	}
	
	
	public function edit($id = null) {
		//TODO root edita apos submissao ? 
		if(($this->Datas->getDataFimSubmissao() < date('Y-m-d H:i:s') &&  $this->Datas->getDataReavaliacaoTrabalho() < date('Y-m-d H:i:s')) && !$this->isAdmin()){
			$this->Session->setFlash(__('O prazo de submissão terminou, você não pode mais alterar este trabalho !'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('index');
		}
		$this->Trabalho->recursive = 0;
		$trabalho = $this->Trabalho->find('first', array('conditions' => array('Trabalho.' . $this->Trabalho->primaryKey => $id)));
		if (!$trabalho ) {
			throw new NotFoundException(__('Trabalho inválido'));
		}
		if(!$this->podeEditar($trabalho))
			$this->redirect('index');
		if ($this->request->is('post') || $this->request->is('put')) {
			$this->request->data['Trabalho']['usuario_id'] = $trabalho['Trabalho']['usuario_id'];
			unset($this->request->data['Trabalho']['revisor_id']);
			unset($this->request->data['Trabalho']['caminho']);
			unset($this->request->data['Trabalho']['justificativa']);
			unset($this->request->data['Trabalho']['avaliado_em']);
			pr($this->request->data['Trabalho']['trabalho']);
			if(!empty($this->request->data['Trabalho']['trabalho']) && $this->request->data['Trabalho']['trabalho']['error'] != 4 && !$this->FileHandler->validar($this->request->data['Trabalho']['trabalho'])){
				$this->Session->setFlash(__('Não foi possível validar esse arquivo ou arquivo vazio'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			}
			else{
				if(!empty($this->request->data['Trabalho']['trabalho']['tmp_name'])){
					$this->request->data['Trabalho']['nome_original'] = $this->request->data['Trabalho']['trabalho']['name'];
					$pasta = $this->Trabalho->Usuario->findLoginById($trabalho['Trabalho']['usuario_id']);
					$this->FileHandler->diretorio = DIRETORIO_TRABALHOS;
					$this->request->data['Trabalho']['caminho'] = $pasta.DS.time();
				}
				if(empty($this->request->data['Trabalho']['caminho']) || $this->FileHandler->armazenar($pasta, $this->request->data['Trabalho']['caminho'], $this->request->data['Trabalho']['trabalho']['tmp_name'])){
					if(!empty($this->request->data['Trabalho']['caminho']))
						unlink($this->FileHandler->diretorio.DS.$trabalho['Trabalho']['caminho']);
					if ($this->Trabalho->save($this->request->data)) {
						$this->Session->setFlash(__('As alterações foram salvas'), 'flash/bootstrap', array('class'=>'alert alert-success'));
						$this->redirect(array('action' => 'view', $id));
					} else {pr($this->Trabalho->validationErrors);
						$this->Session->setFlash(__('Não foi possível modificar o trabalho'), 'flash/bootstrap', array('class'=>'alert alert-error'));
					}
				}
				else {
					$this->Session->setFlash(__('O trabalho não foi enviado. Por favor tente novamente!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				}
			}
		} else {
			$options = array('conditions' => array('Trabalho.' . $this->Trabalho->primaryKey => $id));
			$this->request->data = $this->Trabalho->find('first', $options);
		}
		$usuarios = $this->Trabalho->Usuario->find('list');
		$revisors = $this->Trabalho->Revisor->find('list');
		$categorias = $this->Trabalho->Categoria->find('list');
		$sessaos = $this->Trabalho->Sessao->find('list');
		$this->set(compact('usuarios', 'revisors', 'categorias', 'sessaos'));
	}

	public function delete($id = null) {
		if($this->Datas->getDataFimSubmissao() < date('Y-m-d H:i:s') && !$this->isAdmin()){
			$this->Session->setFlash(__('O prazo de submissão terminou, você não pode mais remover este trabalho !'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('index');
		}
		$this->Trabalho->recursive = -1;
		$trabalho = $this->Trabalho->find('first', array('conditions' => array('Trabalho.' . $this->Trabalho->primaryKey => $id)));
		if(!$trabalho){
			throw new NotFoundException(__('Trabalho inválido'));
		}
		if($this->isAdmin() || $this->usuarioSessao['Usuario']['id'] == $trabalho['Trabalho']['usuario_id']){
			$this->Trabalho->id = $trabalho['Trabalho']['id'];
			$this->request->onlyAllow('post', 'delete');
			if ($this->Trabalho->delete()) {
				$this->Session->setFlash(__('Trabalho excluido !'), 'flash/bootstrap', array('class'=>'alert alert-success'));
				$this->redirect(array('action' => 'index'));
			}
			$this->Session->setFlash(__('Erro ao excluir o trabalho !'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect(array('action' => 'index'));
		}
		else {
			$this->layout = false;
			$this->autoRender = false;
			$this->Session->setFlash(__('Você não tem permissão para acessar esse arquivo!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect('/pages/blank');
		}
	}
	
	public function download($id){
		//TODO testar
		if (!$this->Trabalho->exists($id)) {
			throw new NotFoundException(__('Trabalho inválido'));
		}
		$this->autoRender = false;
		$this->Trabalho->recursive = 1;
		$trabalho = $this->Trabalho->findById($id);
		$caminho_completo = DIRETORIO_TRABALHOS.DS.$trabalho['Trabalho']['caminho'];
		if($trabalho['Trabalho']['revisor_id'] == $this->usuarioSessao['Usuario']['id'] || $trabalho['Trabalho']['usuario_id'] == $this->usuarioSessao['Usuario']['id'] || $this->isAdmin()){
			header('Content-type: application/pdf');
			header('Content-Disposition: attachment; filename="'.$trabalho['Trabalho']['nome_original'].'"');
			header("Content-Length: " .(string)(filesize($caminho_completo)) );
			readfile($caminho_completo);
			//$this->redirect('/'.WWW_DIRETORIO_TRABALHOS.'/'.$string);
			
		}

		else {
			$this->notAuth();
		}

		//echo Router::url($this->here());
		//$this->response->download();
		//$this->response->send();
	
	}
	
	public function total_por_revisor(){
		$revisores = $this->Trabalho->find('list', array('fields'=>array('revisor_id', 'revisor_id'), 'conditions'=>array('revisor_id !='=>NULL, 'revisor_id !='=>0)));
		foreach($revisores as &$item){
			$item = $this->Trabalho->find('count', array('conditions'=>array('revisor_id'=>$item)));
		}
		return $revisores;
	}
	
	public function total_por_revisor_por_categoria(){
		$revisores = $this->Trabalho->find('list', array('fields'=>array('revisor_id', 'revisor_id'), 'conditions'=>array('revisor_id !='=>NULL, 'revisor_id !='=>0)));
		$categorias = $this->Trabalho->Categoria->find('list');
		$return = array();
		foreach($revisores as &$item){
			foreach($categorias as $id_categoria=>$categoria){
				$return[$item][$categoria] = $this->Trabalho->find('count', array('conditions'=>array('revisor_id'=>$item, 'categoria_id'=>$id_categoria)));
			}
		}
		return $return;
	}
	
	public function lista_simples_de_trabalhos(){
		if($this->isAdmin()){
			$this->set('categorias', $this->Trabalho->Categoria->find('list'));
			$this->set('trabalhos', $this->Trabalho->trabalhosPorCategoria());
		}
		else{ $this->notAuth();}
	}
	
	public function anais(){
		$this->layout = null;
		$this->set('categorias', $this->Trabalho->Categoria->find('list'));
		$this->set('trabalhos', $this->Trabalho->find('all', array('conditions'=>array('apresentado'=>1), 'order'=>'titulo ASC')));
	}
	
	public function comprovante_de_aceite($id){
		$trabalho = $this->Trabalho->findById($id);
		if($trabalho['Trabalho']['revisor_id'] == $this->usuarioSessao['Usuario']['id'] || $trabalho['Trabalho']['usuario_id'] == $this->usuarioSessao['Usuario']['id'] || $this->isAdmin()){
			if($trabalho['Avaliacao']['nota'] != 0 || $trabalho['Avaliacao']['nota_reavaliacao'] != 0){
				if($trabalho['Avaliacao']['nota'] != 0)
					$nota = $trabalho['Avaliacao']['nota'];
				elseif($trabalho['Avaliacao']['nota_reavaliacao'] != 0)
					$nota = $trabalho['Avaliacao']['nota_reavaliacao'];
				$categoria_aprovada = $this->Trabalho->Categoria->findById($nota);
				$trabalho['Avaliacao']['CategoriaAprovado'] = $categoria_aprovada['Categoria']['nome'];
				$fileVal = new FileValidation(FILE_VALIDATION_APPID, FILE_VALIDATION_HASH);
				if($trabalho['Trabalho']['comprovante'] == NULL){
					$texChange = new TexChange();
					$this->loadModel('Data');
					$data_inicio = $this->Data->getData('inicio_evento');
					$data_final = $this->Data->getData('fim_evento');
					$file = $texChange->changeTexTrabalho(
							APP.'Comprovantes'.DS.'comprovante-trabalho.tex',
							$trabalho,
							$this->Session->read('config.nome_evento'),
							$this->Session->read('config.local_evento'),
							$data_inicio,
							$data_final,
							$this->usuarioSessao['Usuario']['id']
					);
					$response = $fileVal->sendFile($file);
					unlink($file);
					if($response['status'] == 'OK'){
						$this->Trabalho->id = $trabalho['Trabalho']['id'];
						$this->Trabalho->saveField('comprovante', $response['message']);
						$this->redirect('comprovante_de_aceite/'.$id);
					}
					else{
						$this->log('FILE VALIDATION: '.$response['message']);
						echo $this->Session->setFlash(__('Erro ao gerar seu comprovante! Por favor, entre em contato com a administração'), 'flash/bootstrap', array('class'=>'alert alert-error'));
						$this->redirect('index');
					}
				}
				else{
					$file = $fileVal->getFile($trabalho['Trabalho']['comprovante']);
					$this->response->body($file);
					$this->response->type('pdf');
						
					//Optionally force file download
					$this->response->download('Comprovante-Trabalho'.$this->usuarioSessao['id'].'.pdf');
						
					// Return response object to prevent controller from trying to render
					// a view
					return $this->response;
				}
			}
			else{
				echo $this->Session->setFlash(__('O seu trabalho não foi aceito ou seu trabalho ainda não foi avaliado!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				$this->redirect('index');
			}
		}
	}
	
	public function apresentados(){
		if($this->isAdmin() || $this->isRecepcionista()){
			$aprovados = array(
					'apresentado'=>0,
					'OR'=>array(
							array('Avaliacao.nota !='=>0),
							array('Avaliacao.nota_reavaliacao !='=>0)
					)
			);
			$trabalhos = $this->Trabalho->find('all', array('conditions'=>$aprovados));
			$this->set('trabalhos', $trabalhos);
			$trabalhos_apresentados = $this->Trabalho->find('all', array('conditions'=>
					array(
						'apresentado'=>1,
						'OR'=>array(
								array('Avaliacao.nota !='=>0),
								array('Avaliacao.nota_reavaliacao !='=>0)
						)
					)));
			$this->set('trabalhos_apresentados', $trabalhos_apresentados);
			$this->set('categorias', $this->Trabalho->Categoria->find('list'));
		}
		else{
			$this->notAuth();
		}
	}
	
	public function marcar_como_apresentado($id){
		$this->autoRender = false;
		if($this->isAdmin() || $this->isRecepcionista()){
			$this->Trabalho->id = $id;
			$this->Trabalho->saveField('apresentado', !$this->Trabalho->field('apresentado'));
			$this->redirect('apresentados');
		}
		else{
			$this->notAuth();
		}	
	}
}